18/01/2017
rev 28/01/2017
Mesures de Self et
Capacitemetre
basé sur un 16Fxxx
1ere version avec 16F628
seul (100% ASM)
2em version 16F628 avec en C ...ABORTE
3em version avec LM311 en C
avec 16F1847.......
lien vers CAPACIMETRE
Version 1 .. en asm 16F628
Schema utilisé :
Nota: *petite erreur de schema : le commutateur choix L ou C
était sur RB5 au lieu de RB6
Principe :
Usage des comparateurs
Analogiques du 16F628 , montés en oscillateur , accordé via L
et C
La resistance de 47K ,reliée à l'entree (-) ,permet de
lineariser l'ampli OP et de conserver un niveau de repos en DC.
La R de 100k ,entre sortie AOP et entree (+) , introduit une
reaction poistive => oscillation du circuit
Le circuit LC: 100µH et 1000pF est le coeur de l'oscillateur,
qui va donner une valeur de frequence F1,
En faisant au plus court :
le maximum de ré-injection se faisant à la valeur maxi de l'impedance
Z (mode parallele) du circuit LC
Uentree = USortie * Z / (Z+100k) , on se cale alors sur la valeur
de résonnance
En rajoutant le condo de 1000pF (à 1%) on decale la frequence à
une valeur de frequence F2
Mesures Réalisées à l'Oscillo Tektronix TDS2002C
![]() |
![]() |
F1= 550Khz , amplitude 220mV eff. | F2 =385 Khz amplitude 120mV eff. |
Usage des straps JP1 à JP4
:
- Les sorties vers le LCD, RB0..RB4 sont commutées
momentanément en entrées pour lire l'etat des straps
cet etat est memorisé dans la variable "links"
Etat Links sur "Test F1 JP3 " : Le relais est "OFF"
pour mesurer F1
![]() |
![]() |
Etat Links sur "Test F2 JP4 " : Le relais est "ON"
pour mesurer F2
![]() |
![]() |
Explicage du programme : ( ou ce que j'en ai compris)
voir Datasheet 16F628 DS40300C page 20
Option REG = 0x37
T0CS: TMR0 Clock Source Select bit 1 = Transition on RA4/T0CKI
pin
T0SE: TMR0 Source Edge Select bit 1 = Increment on high-to-low
transition on RA4/T0CKI pin
PS2:PS0: Prescaler Rate Select bits 111 => 1/256
Le signal provenant de l'oscillateur est mis en forme via le
second ampli OP , est ensuite connecté
à l'entree RA4 , Comptage Timer0.
La mesure de frequence ( via le Timer0) est faite dans une
fenetre temporelle de 100mS
et utilise le Prescaler 1/256 comme LSB et TMR0 comme MSB (car
situé Apres le diviseur par 256)
valeur 16 bits stokée dans la variable F3 ( et F3+1)
Le prescaler recoit alors des impulsion via TOSE ,
qui sont decompté sur F3+1 , initialisé prealablement à 0 ..
donc 256..254..253
... etc .. jusqu'à ce que le prescaler atteigne 0 .. et se
propage au Tmr0 .
on aura alors recopié le complement du Prescaler ,
donc le nb de pulses entrées dans le prescaler à la fermeture
de fenetre 100mS.
Nota : la capacité de comptage (F3 et F3+1) est de 65535 maxi ..
on ne tient pas compte du debordement TMR0
* modif programme :
- rajout subroutine Tempo 4 sec
- insertion messages de presentation "Titre" et "Version"
en EEPROM
.. qui introduisent donc un delai de stabilisation de 2x4=8sec
apres la mise sous tension
- rajout Alternative à la Calibration :
pour eviter de repasser par la case RESET = cause d'instabilité
necessitera un Switch ( dédié Calibration) avec 2 contacts !
Test simultané sur JP3 et JP4 actifs pour rentrer dans le mode
Calibration
-Rajout message d'invitation à "Remov Cal Switch"
Desactiver le Swtich Calibration pour revenir dans la boucle
principale du programme
donc en mode Calibration
On peut conserver éventuellement , à part , un BP dédié au
Reset .
RA4
est configurée en Sortie 0 sur TRISA bit4 ?
La, c'est pas bien clair ! il semblerait que le signal de sortie
comparateur soit aiguillé vers la sortie RA4
qui est indirectement , une entree de comptage pour le Timer0 ,
via un circuit "OU"
Ce n'est pas du tout evident à la lecture de la datasheet..
QUAND ON NE LIT PAS TOUT !
En fouillant de nouveau dans la Data Sheet PIC16F628 partie I/O. dont RA4
Là , le cheminement de la sortie Comparateur est mieux explicite.
Le choix de config Comparator Mode 110 montre que pour traverser
le ETen sortie comparateur, il faut un 1
permanent de l'autre coté.
Ce 1 est fournit par la sortie bascule Q barre commandée par un
Write de 0 (= Output) sur TRISA RA4 .
Le signal carré sortie Comparteur2 se retrouve bien sur RA4 ..
qui necessite une R Pull up au +VCC ( ici 4,7k )
Un Write 1 sur TRISA.RA4
=> Q barre=0 bloque le ET => plus de signal vers Tmr0..
Nota: il manque aussi sur ce schema l'aiguillage du OU pour la connection de ce signal OU
celui de TOSE
à l'entree comptage timer0.
Calculs : F = 1 / (2*PI*F) Get_Lscale 1/ (2*PI)^2 * 1E17 => 2533029591058440 Cal_t 10 000 ( 1000pF * 10) L=100µH C=1000pF F1= 503 292 L=100µH C=2000pF F2= 355 881 Rapport (F1/F2) 1,4142136 Rapport (F1/F2)^2 2,0000000 Rapport (F1/F2)^2 -1 1,0000000 FX avec L=100µH C=1000pF + Cx=1000pF F2= 355 881 Rapport (F1/Fx)^2-1 => 1,000 * Cal_t => 1000,0pF FX avec L=100µH C=1000pF + Cx=33pF FX 495 188 Rapport (F1/Fx)^2-1 => 0,033 * Cal_t => 33,0pF |
![]() |
SOFTWARE :
MPLAB IDE 8.92 + ASM :
un code tres instructif. ported to 16F628 by Egbert Jarings PA0EJH.
_LCMeter_16F628_170119.zip
_ LCMeter_16F628_170119.asm
_ LCMeter_16F628_170119.HEX
_fichier XLS : LC_Metr16F628_170119.xls
Version 2 .. 16F628 en C
Test avec MikroC ..
partie mesure brute OK pour F1 et F2
_16F628_LCmeter_LCD2x16_4bits_BAD.c
mais IMPOSSIBLE d'utiliser du flottant (MikroC) .. prend trop de
place
=> abandon de cette version avec 16F628.. Quid du 16F1847 ?
Version 3 . avec 16F1847 et LM311
(comparateur externe au MCU)
Hardware :
schema issu d'une version ATMEGA
portage sur PIC16F1847
Ce PIC a suffisament de ROM program et RAM
Test de l'Oscillateur , basé sur le LM311
1ere etape essentielle ..
En simulation (avec CMS60)
LC_Meter_test.ckt
En Mode Reel ,
Pinout (en guise de
schéma)
Prototype :
1ere Breadboard
Alimenté en 5V
Decouplage 100µ//470nF
Le LM311 Oscillateur + self 100µH + capa + relais CCal 1 contact
+ capa 1nF 1% sont monté sur la breadboard du haut
Lle signal Frequence (sortie du LM311) va sur l'entree RB6 du PIC
.. qui est aussi
utilisée par l'ICSP
Il faut donc debrancher cette connection pour utiliser l'ICSP ..
2em Breadboard
Le PIC 16F1847 + quartz + 2x33pF + decouplage (100nF +10µF) +
Circuit reset RC
commande les 2 relais,recoit les 2 entrees Calibr et choix LC
Liaison I2C avec l'afficheur 4x20 cars
Liaison UART via cable Porlic 2303 (directe)
Liaison ICSP avec Pickit2
Alim 5V
Attente appro
Relais 2 RT ...
Cdé chez Conrad
Fonctionalites :
Affichage sur un LCD 4x20 car piloté en I2C
Affichage sur terminal UART
Au choix: Commandes via BP et switch
ou via terminal UART Clavier :.
Mode Calibration
Mode Test
Mode Capacilmetre
Mode Selfmetre
Cde RESET
....... . ou via BlueTooth <--> Android appli
SOFTWARE :
Ce PIC a des E/S configurable via le registre APFCON
mais toutes les config possibles NE SONT PAS explicitées !
Grosse galere pour
arriver à configurer RB2 comme RX UART
( nota: plus aisé si choix
RB1 RX et RB2 TX comme UART)
alors que No problemo avec RB5=TX UART emiision OK .. reception
BAD
RB2 ecrase le signal RX reçu !
La solution (?) : Configuere le Hardware, configurer l L'UART
Hardware, configurer le registre APFCON
et en plus reconfigurer RB2 en entree..
Nota: la config Soft_UART_Init(&PORTB,2,5,9600,0) .. ne
configure pas non plus RB2 en RX UART !
FOSC avec Q=8MHz
Le Timer1 16 bits , est bien plus confortable que le Timer0 8bits
du 16F628+ Prescaler
Fenetre temporelle de 100mS pour mesurer la frequence (en dizaine
de Hz bien sur!)
Le mode TEST :
Commande "Test<CR>
permet de verifier que les frequences de base
F1 (100µH et 1000pF) et F2 (100µH+1000pF+1000pF
CCal) sont bien dans les clous à +-5%.
Les valeurs de base (references) sont définies en dur, dans le
programme .. on pourrait aussi les mettre en EEPROM .. Hum ! boof!
Nota: Je n'ai que 100µH sous la main au lieu de 82µH ..
Le mode Calibration
Commande "Calibre<CR>"permet de calculer le
rapport F1/F2 necessaire aux calculs suivants ...voir tableau de
formules
Relais CCal au repos, on mesure la frequence d'oscillation de F1
(LC=100µH//100pF)
Relais CCal activé,permet de rajouter 1000pF en parralele sur le
circuit oscillant de base pour obtenir F2
on en deduit F1/F2...
Le mode capacimetre
Commande="Capa<CR>"
Le relais LC est au repos,
utilise la base 100µH + 1000pF auquel on rajoute (mise en
parallele sur le 1000pF) la capa Cx à mesurer.
Le mode Selfmetre
commande="Self<cR>
Le relais LC 2 contacts RT est activé pour pouvoir mettre Lx en
serie avec L=100µH
Le condensateur C de 1000pF reste en parallele sur l'ensemble L +Lx
En cas de probleme sur le LM311 , si l'oscillateur n'oscille pas,
le MCU part en RESET ..
Nota: on peut aussi envoyer une commande "RESET<CR>"
via l'UART.
![]() |
![]() |
![]() |
A suivre mesures C et L
Resultats sur
Terminal..
Projet MIKROC :
source : _16F1847_LCMeter_BT_170128.c
Chargeur: 16F1847_LCMeter_BT_2017.hex
projet zipé: _16F1847_LCMeter_BT_170128.zip
à suivre : Circuit imprimé
Retour
à l'index general